home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 4 / The Arsenal Files 4 (Arsenal Computer).ISO / casm / au116-as.exe / UTIL / SUBST.CPP < prev    next >
C/C++ Source or Header  |  1994-11-09  |  2KB  |  118 lines

  1. #include "..\au.hpp"
  2. /*************************************************************************/
  3. void substitute_macros(char *dest_string, char *execute, char *over_opt,
  4.                        char *path_opt, char *yes_opt, char *filename)
  5. {
  6.     while (*execute != '\0')
  7.     {
  8.         if (*execute == '%')
  9.         {
  10.             *execute++;
  11.             *dest_string = '\0';
  12.             switch (toupper(*execute))
  13.             {
  14.                 case 'F':
  15.                     strcat(dest_string, filename);
  16.                     dest_string += strlen(dest_string);
  17.                     break;
  18.                 case 'O':
  19.                     if (over_opt != NULL)
  20.                     {
  21.                         strcat(dest_string, over_opt);
  22.                         dest_string += strlen(dest_string);
  23.                     }
  24.                     break;
  25.                 case 'P':
  26.                     if (path_opt != NULL)
  27.                     {
  28.                         strcat(dest_string, path_opt);
  29.                         dest_string += strlen(dest_string);
  30.                     }
  31.                     break;
  32.                 case 'Y':
  33.                     if (yes_opt != NULL)
  34.                     {
  35.                         strcat(dest_string, yes_opt);
  36.                         dest_string += strlen(dest_string);
  37.                     }
  38.                     break;
  39.             }
  40.         }
  41.         else
  42.             *dest_string++ = *execute;
  43.  
  44.         execute++;
  45.     }
  46.     *dest_string = '\0';
  47.     return;
  48. }
  49. /************************************************************************/
  50. void subst_environ(AU *au, char *string)
  51. {
  52.     char var[300];
  53.     char *varPtr;
  54.     char newString[300];
  55.     char *newPtr = newString;
  56.     char *ptr = string;
  57.     BYTE normal;
  58.  
  59.     while (*ptr != '\0')
  60.     {
  61.         if (*ptr == '%')
  62.         {
  63.             ptr++;
  64.             if (*ptr == '%')
  65.             {
  66.                 *newPtr++ = '%';
  67.                 ptr++;
  68.                 continue;
  69.             }
  70.             varPtr = var;
  71.             normal = TRUE;
  72.             while (*ptr != '%')
  73.             {
  74.                 *varPtr++ = *ptr;
  75.                 if (*ptr == '\0' || isspace(*ptr))
  76.                 {
  77.                     normal = FALSE;
  78.                     break;
  79.                 }
  80.                 ptr++;
  81.             }
  82.             *varPtr = '\0';
  83.             if (!normal || strlen(var) < 2)
  84.             {
  85.                 strcpy(newPtr, "%");
  86.                 newPtr++;
  87.                 strcpy(newPtr, var);
  88.                 newPtr += strlen(var);
  89.                 if (normal)
  90.                 {
  91.                     strcpy(newPtr, "%");
  92.                     newPtr++;
  93.                 }
  94.             }
  95.             else
  96.             {
  97.                 strupr(var);
  98.  
  99.                 if (getenv(var) != NULL)
  100.                 {
  101.                     strcpy(newPtr, getenv(var));
  102.                     newPtr += strlen(getenv(var));
  103.                 }
  104.                 else
  105.                     au_printf_error(au, "Environment variable \"%s\" not found", var);
  106.             }
  107.         }
  108.         else
  109.             *newPtr++ = *ptr;
  110.         if (*ptr != '\0')
  111.             ptr++;
  112.     }
  113.     *newPtr = '\0';       /* NULL terminate the string */
  114.     strcpy(string, newString);
  115.     return;
  116. }
  117.  
  118.